package com.filldream.fastboot.common.util;

import org.apache.commons.lang3.StringUtils;
import weixin.popular.util.EmojiUtil;
import java.util.Base64;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


/**
 * 字符工具类
 * @author RickSun
 */
public class StringUtil {

	/**
	 * @description 去除字符串首尾特定字符
	 * @date 2021/10/28 15:22
	 * @param srcStr	源字符串
	 * @param splitter	特殊字符穿
	 * @return java.lang.String
	 **/
	public static String trimBothEndsChars(String srcStr, String splitter) {
		String regex = "^" + splitter + "*|" + splitter + "*$";
		return srcStr.replaceAll(regex, "");
	}

	/**
	 * 去除\r\n特殊字符
	 * @param str
	 * @return
	 */
	public static String removeEnter(String str){
		String reg ="[\n-\r]";
		Pattern p = Pattern.compile(reg);
		Matcher m = p.matcher(str);
		return m.replaceAll("");
	}

	/**
	 * byte[]经过base64转换
	 * @param bytes
	 * @return
	 */
	public static String encodeBase64(byte[] bytes){
		return StringUtil.removeEnter(Base64.getEncoder().encode(bytes).toString());
	}

	/**
	 * 去掉最右边的指定字符串
	 * @param str        待处理字符串
	 * @param rStr  指定字符串  空格不处理
	 * @return  两个字符串相等返回空，没找到指定字符串则返回待处理字符串
	 */
	public static String rTrim(String str, String rStr) {

		if(StringUtils.isBlank(str)) {
			return "";
		}
		if(StringUtils.isBlank(rStr)) {
			return str;
		}
		if(str.equals(rStr)) {
			return "";
		}
		int lastIndex = str.lastIndexOf(rStr);
		if(lastIndex < 0) {
			return str;
		}
		if(lastIndex >= 0) {
			return str.substring(0, str.length() - rStr.length());
		}
		return str;
	}

	/**
	 * 去掉最左边的指定字符串
	 * @param str        待处理字符串
	 * @param lStr  指定字符串  空格不处理
	 * @return  两个字符串相等返回空，没找到指定字符串则返回待处理字符串
	 */
	public static String lTrim(String str, String lStr) {

		if(StringUtils.isBlank(str)) {
			return "";
		}
		if(StringUtils.isBlank(lStr)) {
			return str;
		}
		int frist = str.indexOf(lStr);
		if(frist != 0) {
			return str;
		}
		if(frist == 0) {
			if(str.equals(lStr)) {
				return "";
			}
			return str.substring(lStr.length(), str.length());
		}
		return str;
	}

	/**
	 * 手机号脱敏
	 * @param telephone	手机号
	 * @return	脱敏后的电话，如:186****1234
	 */
	public static String hidePhone(String telephone){
		if( StringUtils.isBlank(telephone) ){
			return "";
		}
		if( telephone.length() < 5 ){
			return "****";
		}
		return telephone.substring(0,3) + "****" + telephone.substring(7);
	}

	/**
	 * @author RickSun
	 * @Description 脱敏姓名
	 **/
	public static String hideName(String name){
		if( StringUtils.isBlank( name ) ){
			return "***";
		}
		int length = name.length();
		if( length == 1 ){
			return "*";
		}else if( length == 2 ){
			return name.substring(0,1) + "*";
		}else if( length == 3 ){
			return name.substring(0,1) + "*" + name.substring( length -1,length );
		}else if( length == 4 ){
			return name.substring(0,1) + "**" + name.substring( length -1,length );
		}
		return name.substring(0,1) + "****" + name.substring( length -1,length );
	}

	/**
	 * @author RickSun
	 * @Description 查找字符在字符穿中N次出现的位置
	 * @param sourceStr 源字符串
	 * @param findStr 需要查找的字符串
	 * @param frequency 出现的次数
	 * @remark 当找不到时返回-1
	 **/
	public static int findStr(String sourceStr ,String findStr ,long frequency) {
		Pattern pattern = Pattern.compile(findStr);
		Matcher findMatcher = pattern.matcher(sourceStr);
		long number = 0;
		while(findMatcher.find()) {
			number++;
			if(number == frequency){
				break;
			}
		}
		try {
			int i = findMatcher.start();
			return i;
		}catch (Exception e){
			return -1;
		}
	}

	/**
	 * 字符串是否包含表情
	 * @param str	字符串
	 * @return	true-包含 false-不包含
	 */
	public static  boolean containEmojis(String str){
		if(StringUtils.isBlank(str)){
			return true;
		}
		int emojiLength = str.length();
		str = EmojiUtil.removeAllEmojis(str);
		int emojiLength2 = str.length();
		return  emojiLength2 != emojiLength;
	}

}